package controle.aplicativo.util;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import org.primefaces.context.RequestContext;
import org.primefaces.event.CloseEvent;
import org.primefaces.event.ToggleEvent;

import controle.arquitetura.comum.string.UtilString;

public abstract class BeanAbstrato {

	public static final FacesMessage.Severity MSG_TIPO_AVISO = FacesMessage.SEVERITY_WARN;
	public static final FacesMessage.Severity MSG_TIPO_ERRO = FacesMessage.SEVERITY_ERROR;
	public static final FacesMessage.Severity MSG_TIPO_FATAL = FacesMessage.SEVERITY_FATAL;
	public static final FacesMessage.Severity MSG_TIPO_INFORMACAO = FacesMessage.SEVERITY_INFO;

	public void setMensagem(final String mensagem, final Severity message,
			final String detalhe) {
		List<String> mensagens = UtilString.split(mensagem, "~");
		for (String msg : mensagens) {
			FacesContext.getCurrentInstance().addMessage(msg,
					new FacesMessage(message, msg, detalhe));
		}
		if (!message.equals(MSG_TIPO_INFORMACAO)) {
			RequestContext context = RequestContext.getCurrentInstance();
			if (context != null) {
				context.addCallbackParam("falhou", true);
			}
		}
	}

	public void handleClose(CloseEvent event) {
		setMensagem("Closed panel id:'" + event.getComponent().getId() + "'",
				FacesMessage.SEVERITY_INFO, "Panel Closed");
	}

	public void handleToggle(ToggleEvent event) {
		setMensagem(event.getComponent().getId() + " toggled",
				FacesMessage.SEVERITY_INFO, "Status:"
						+ event.getVisibility().name());
	}

	/**
	 * Retorna a descrição do item da combo.
	 * 
	 * @param lista
	 *            List<SelectItem>
	 * @param valor
	 *            Object
	 * @return String
	 */
	public static String getDescricaoCombo(List<SelectItem> lista, Object valor) {
		if (lista != null && valor != null) {
			for (SelectItem selectItem : lista) {
				if (selectItem.getValue().equals(valor)) {
					return selectItem.getLabel();
				}
			}
		}
		return null;
	}

}
